package com.slz.crm.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.slz.crm.pojo.ao.Privacy;
import com.slz.crm.pojo.entity.SalesStageApprovalEntity;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 销售阶段审批VO
 */
@Data
public class SalesStageApprovalVO implements Privacy {
    /**
     * 审批记录ID
     */
    private Long id;
    /**
     * 关联销售机会ID
     */
    private Long opportunityId;
    /**
     * 关联销售机会名称
     */
    private String opportunityName;
    /**
     * 当前阶段（变更前的阶段）
     */
    private String currentStage;
    /**
     * 目标阶段（申请变更到的阶段）
     */
    private String targetStage;
    /**
     * 审批人ID（上级或指定审批人）
     */
    private Long approverId;
    /**
     * 审批状态（0待审批/1同意/2拒绝/3退回修改）
     */
    private Integer approvalStatus;
    /**
     * 审批意见（审批人的反馈）
     */
    private String approvalOpinion;
    /**
     * 申请时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime applyTime;

    /**
     * 从Entity创建VO，需要传入销售机会名称、当前阶段名称和目标阶段名称
     * @param entity 销售阶段审批实体
     * @param opportunityName 销售机会名称
     * @param currentStage 当前阶段名称
     * @param targetStage 目标阶段名称
     * @return SalesStageApprovalVO
     */
    public static SalesStageApprovalVO fromEntity(SalesStageApprovalEntity entity, String opportunityName,
                                                String currentStage, String targetStage) {
        if (entity == null) {
            return null;
        }

        SalesStageApprovalVO vo = new SalesStageApprovalVO();
        vo.setId(entity.getId());
        vo.setOpportunityId(entity.getOpportunityId());
        vo.setOpportunityName(opportunityName);
        vo.setCurrentStage(currentStage);
        vo.setTargetStage(targetStage);
        vo.setApproverId(entity.getApproverId());
        vo.setApprovalStatus(entity.getApprovalStatus());
        vo.setApprovalOpinion(entity.getApprovalOpinion());
        vo.setApplyTime(entity.getApplyTime());

        return vo;
    }
}
